home *** CD-ROM | disk | FTP | other *** search
/ Venus 7000 / darktronics.iso / Software / Service Packs / Win2kSP4.exe / i386 / ipp_util.in_ / ipp_util.inc
Encoding:
Text File  |  2003-06-19  |  13.8 KB  |  419 lines

  1. <%
  2. '------------------------------------------------------------
  3. '
  4. '   Microsoft Internet Printing Project
  5. '
  6. '   Copyright (c) Microsoft Corporation 1998
  7. '
  8. '------------------------------------------------------------
  9. %>
  10.  
  11. <%
  12.  
  13. Const L_DocumentList_Text   = "Document List"
  14. Const L_DerivedFont_Text    = " face=""Tahoma, Verdana, Arial, MS Sans Serif"" "
  15. Const L_DoubleDevFont_Text  = " face=""""Tahoma, Verdana, Arial, MS Sans Serif"""" "
  16.  
  17. Const PROGID_CLIENT_HELPER  = "OlePrn.PrinterURL"
  18. Const PROGID_SNMP           = "OlePrn.OleSNMP"
  19. Const PROGID_HELPER         = "OlePrn.AspHelp"
  20. Const PROGID_CONVERTER      = "OlePrn.OleCvt"
  21. Const PROGID_ADDPRINTER     = "OlePrn.AddPrint"
  22. Const VIEW_EQUALS           = "&view="
  23. Const ONCLICK_EQUALS        = " onclick="
  24. Const QUOTE                 = """"
  25. Const QUEUE_VIEW            = "ipp_0007.asp"
  26. Const PROPERTY_VIEW         = "ipp_0006.asp"
  27. Const UNAUTHORIZED_401      = "401 Unauthorized"
  28.  
  29. Const COMPUTER              = "MS_Computer"
  30. Const LOCAL_SERVER          = "MS_LocalServer"
  31. Const DHTML_ENABLED         = "MS_DHTMLEnabled"
  32. Const DEFAULT_PAGE          = "MS_DefaultPage"
  33. Const PRINTER               = "MS_Printer"
  34. Const URLPRINTER            = "MS_URLPrinter"
  35. Const SNMP                  = "MS_SNMP"
  36. Const IPADDRESS             = "MS_IPAddress"
  37. Const COMMUNITY             = "MS_Community"
  38. Const DEVICE                = "MS_Device"
  39. Const PORTNAME              = "MS_Portname"
  40. Const MODEL                 = "MS_Model"
  41. Const ASP1                  = "MS_ASP1"
  42. Const ATPRINTER             = "&MS_Printer="
  43. Const ATURLPRINTER          = "&MS_URLPrinter="
  44. Const ATSNMP                = "&MS_SNMP="
  45. Const ATIPADDRESS           = "&MS_IPAddress="
  46. Const ATCOMMUNITY           = "&MS_Community="
  47. Const ATDEVICE              = "&MS_Device="
  48. Const ATPORTNAME            = "&MS_Portname="
  49. Const ATMODEL               = "&MS_Model="
  50. Const ATASP1                = "&MS_ASP1="
  51. Const ATPAGE                = "&page="
  52.  
  53. ' when being passed thru URL, a printer name is encoded. For each character, the maximum number of 
  54. ' characters after encoding is 6. So 512 * 6 = 3072, where we assume the longest printer unc name 
  55. ' should be less than or equal to 512.
  56. Const MAX_ENCODED_PRINTER_NAME_LENGTH = 3072
  57. Const L_Invalid_Parameter   = "Invalid Parameter"
  58.  
  59. Dim   DEF_FONT, DEF_BASEFONT_TAG, DEF_FONT_TAG, LARGE_FONT_TAG, MENU_FONT_TAG
  60. Dim   SUBMENU_FONT, SUBMENU_FONT_TAG, CLIENT_FONT, DEF_DOUBLEFONT, DEF_DOUBLEFONT_TAG
  61.  
  62. DEF_FONT                    = L_DerivedFont_Text
  63. DEF_DOUBLEFONT              = L_DoubleDevFont_Text
  64. DEF_BASEFONT_TAG            = "<basefont  " & L_DerivedFont_Text & " size=2>"
  65. DEF_FONT_TAG                = "<font " & L_DerivedFont_Text & " size=2>"
  66. LARGE_FONT_TAG              = "<font " & L_DerivedFont_Text & " size=4>"
  67. MENU_FONT_TAG               = "<font " & L_DerivedFont_Text & " size=2 color=white>"
  68. SUBMENU_FONT                = L_DerivedFont_Text & " size=1 "
  69. SUBMENU_FONT_TAG            = "<font " & L_DerivedFont_Text & " size=2>"
  70. CLIENT_FONT                 = "<font " & L_DerivedFont_Text & ">"
  71. Const END_FONT              = "</font>"
  72.  
  73. 'Initialize UTF8 related information
  74. Dim bUTF8
  75. Dim OleCvt
  76.  
  77. Function bUTF8Capable
  78.     Dim objBrowcap
  79.  
  80.     Set objBrowcap = server.CreateObject("MSWC.browsertype")
  81.     If (objBrowcap.browser = "IE" Or objBrowcap.browser = "Netscape")  And objBrowcap.majorver >= "4" Then
  82.         bUTF8Capable = True
  83.     Else
  84.         bUTF8Capable = False
  85.     End If
  86. End Function
  87.  
  88.  
  89. Sub InitCodepage ()
  90.     Set OleCvt = Server.CreateObject (PROGID_CONVERTER)
  91.  
  92.     bUTF8 = bUTF8Capable
  93.     If bUTF8 Then
  94.         Session.Codepage = 1252
  95.     End If
  96.  
  97. End Sub
  98.  
  99. InitCodePage
  100.  
  101. Function SetCodePage ()
  102.     If (bUTF8) Then 'If not UTF enabled, use the default charset
  103.         SetCodePage = "<Meta Http-equiv=""Content-Type"" Content=""text/html; CHARSET=UTF-8"">"
  104.     Else
  105.         SetCodePage = ""
  106.     End If
  107. End Function
  108.  
  109. Function Write (strUnicode)
  110.     If bUTF8 Then
  111.         Write = OleCvt.ToUtf8 (strUnicode)
  112.     Else
  113.         Write = strUnicode
  114.     End If
  115. End Function
  116.  
  117. Function SubstituteString(strIn, strPattern, strReplacement)
  118.     Dim iStrPos
  119.  
  120.     iStrPos = InStr(strIn,strPattern)
  121.     SubstituteString = Left(strIn, iStrPos-1) & strReplacement & Mid(strIn, iStrPos + Len(strPattern))
  122. End Function
  123.  
  124. Function RepString1( strIn, strRep )
  125.     RepString1 = SubStituteString( strIn, "%1", strRep)
  126. End Function
  127.  
  128. Function RepString2( strIn, strRep1, strRep2 )
  129.     RepString2 = SubStituteString( RepString1(strIn, strRep1) , "%2", strRep2)
  130. End Function
  131.  
  132. Function RepString3( strIn, strRep1, strRep2, strRep3 )
  133.     RepString3 = SubStituteString( RepString2(strIn, strRep1, StrRep2), "%3", strRep3)
  134. End Function
  135.  
  136. Function GenErrorPage (iCode, strSource, strDscp, strNote)
  137.     Dim strHTML
  138.     Const L_ErrCode_Text      = "<b>Error Code:</b>"
  139.     Const L_ErrDscp_Text      = "<b>Description:</b>"
  140.     Const L_ErrNote_Text      = "<b>Note:</b>"
  141.     Const L_ErrTitle_Text     = "Internet Printing Error"
  142.     Const L_ErrSource_Text    = "The error occurred in <b>%1</b>"
  143.     Const L_ErrOccurProc_Text = "<p>An <b>error</b> occurred processing your request.</p>"
  144.  
  145.     strHTML = "<html><head><title>" & L_ErrTitle_Text & "</title>"
  146.     strHTML = strHTML & SetCodePage
  147.     strHTML = strHTML & "</head><body bgcolor=#FFFFFF>" & DEF_BASEFONT_TAG
  148.     strHTML = strHTML & L_ErrOccurProc_Text
  149.  
  150.     If strSource <> "" Then
  151.         strHTML = strHTML & RepString1(L_ErrSource_Text, strSource)
  152.     End If
  153.  
  154.     strHTML = strHTML & "<table>"
  155.  
  156.     strHTML = strHTML & "<tr><td>" & L_ErrCode_Text & "</td><td>" & (Hex (iCode)) & "</td></tr>"
  157.  
  158.     If strDscp <> "" Then
  159.         strHTML = strHTML & "<tr><td>" & L_ErrDscp_Text & "</td><td>" & strDscp & "</td></tr>"
  160.     End If
  161.  
  162.     If strNote <> "" Then
  163.         strHTML = strHTML & "<tr><td>" & L_ErrNote_Text & "</td><td>" & strNote & "</td></tr>"
  164.     End If
  165.  
  166.     strHTML = strHTML & "</table></body></html>"
  167.     GenErrorPage = strHTML
  168. End Function
  169.  
  170. Sub ErrorHandler(strNotes)
  171.     Dim strDscp, strSource
  172.  
  173.     Dim str401Error
  174.  
  175.     If Err.Number = 70 Or Err.Number = &H80070005 Then
  176.         Const L_ErrTitle_Text = "Internet Printing Authentication Error"
  177.         Const L_ErrTitle2_Text = "Authentication Failed"
  178.         Const L_ErrLine1_Text = "The error indicates that the action you chose requires a higher privilege than what you have with your account."
  179.         Const L_ErrLine2_Text = "Please contact your system administrator to verify that you have the privilege on the requested action."
  180.  
  181.         str401Error = "<html><head><title>" & L_ErrTitle_Text & "</title>" &_
  182.             "</head>" &_
  183.             "<body bgcolor=#FFFFFF>" &_
  184.             DEF_FONT_TAG &_
  185.             "<p><H2>" & L_ErrTitle2_Text & "</H2></p>" &_
  186.             "<p>" & L_ErrLine1_Text &_
  187.             "<br>" &_
  188.             "<br>" & L_ErrLine2_Text & "</p>" &_
  189.             "</font></body></html>"
  190.         response.write (Write(str401Error))
  191.         response.status = UNAUTHORIZED_401
  192.     Else
  193.         If Err.Number = &H80070709 Then
  194.             Const L_ErrInvalidName_Text = "Printer not found on server, unable to connect."
  195.             Err.Description = L_ErrInvalidName_Text
  196.         End If
  197.  
  198.         response.write(Write(GenErrorPage (Err.Number, Err.Source, Err.Description, strNotes)))
  199.     End If
  200.     response.Expires = 0
  201.     response.end
  202.  
  203. End Sub
  204.  
  205. Function bDHTMLSupported()
  206.     On Error Resume Next
  207.     Err.Clear
  208.     Dim objBrowcap
  209.  
  210.     Set objBrowcap = server.CreateObject("MSWC.browsertype")
  211.     If Not Err And objBrowcap.browser = "IE" And objBrowcap.majorver >= "4" Then
  212.         bDHTMLSupported = True
  213.     Else
  214.         bDHTMLSupported = False
  215.     End If
  216. End Function
  217.  
  218. Sub CheckSession()
  219.     ' check to see if the session has timed out
  220.     If Session(COMPUTER) = "" Then
  221.         response.redirect ("ipp_0003.asp")
  222.         response.end
  223.     End If
  224. End Sub
  225.  
  226. Function strPrinterStatus(iStatus)
  227.     Dim L_PrinterStatus_Text(24)
  228.     Const L_Seperator_Text = " - "
  229.     Const L_PrinterReady_Text = "Ready"
  230.  
  231.     L_PrinterStatus_Text(0)  = "Paused"
  232.     L_PrinterStatus_Text(1)  = "Error"
  233.     L_PrinterStatus_Text(2)  = "Deleting"
  234.     L_PrinterStatus_Text(3)  = "Paper Jam"
  235.     L_PrinterStatus_Text(4)  = "Out of Paper"
  236.     L_PrinterStatus_Text(5)  = "Manual Feed Required"
  237.     L_PrinterStatus_Text(6)  = "Paper Problem"
  238.     L_PrinterStatus_Text(7)  = "Use Printer Offline"
  239.     L_PrinterStatus_Text(8)  = "IO Active"
  240.     L_PrinterStatus_Text(9)  = "Busy"
  241.     L_PrinterStatus_Text(10) = "Printing"
  242.     L_PrinterStatus_Text(11) = "Output Bin Full"
  243.     L_PrinterStatus_Text(12) = "Not Available"
  244.     L_PrinterStatus_Text(13) = "Waiting"
  245.     L_PrinterStatus_Text(14) = "Processing"
  246.     L_PrinterStatus_Text(15) = "Initializing"
  247.     L_PrinterStatus_Text(16) = "Warming Up"
  248.     L_PrinterStatus_Text(17) = "Toner Low"
  249.     L_PrinterStatus_Text(18) = "No Toner"
  250.     L_PrinterStatus_Text(19) = "Page Punt"
  251.     L_PrinterStatus_Text(20) = "User Intervention Required"
  252.     L_PrinterStatus_Text(21) = "Out of Memory"
  253.     L_PrinterStatus_Text(22) = "Door Open"
  254.     L_PrinterStatus_Text(23) = "Server Status Unknown"
  255.     L_PrinterStatus_Text(24) = "Power Save Mode"
  256.  
  257.     Dim bit, i
  258.     bit = 1
  259.     i = 0
  260.     Dim strHTML, bFirst
  261.  
  262.     bFirst = True
  263.     strHTML = ""
  264.  
  265.     For i = 0 To 24
  266.     If iStatus And bit Then
  267.         If Not bFirst Then
  268.         strHTML = strHTML + L_Seperator_Text
  269.         End If
  270.         strHTML = strHTML + L_PrinterStatus_Text(i)
  271.             bFirst = False
  272.     End If
  273.         bit = bit * 2
  274.     Next
  275.     If bFirst Then
  276.         strHTML = "<font color=green>" & L_PrinterReady_Text & "</font>"
  277.     Else
  278.         strHTML = "<font color=red>" & strHTML & "</font>"
  279.     End If
  280.  
  281.     strPrinterStatus = strHTML
  282. End Function
  283.  
  284. Function strFormatJobSize(iJobSize)
  285.     Const  L_Bytes_Text     = "%1 bytes"
  286.     Const  L_KiloBytes_Text = "%1 Kb"
  287.     Const  L_MegaBytes_Text = "%1 Mb"
  288.     
  289.  
  290.     If iJobSize < 1024 Then
  291.         strFormatJobSize = RepString1(L_Bytes_Text, CStr(iJobSize) )
  292.     ElseIf iJobSize < 1048576 Then
  293.         strFormatJobSize = RepString1(L_KiloBytes_Text, formatnumber(iJobSize / 1024, 1) )
  294.     Else
  295.         strFormatJobSize = RepString1(L_MegaBytes_Text, formatnumber(iJobSize / (1024 * 1024), 1) )
  296.     End If
  297. End Function
  298.  
  299. Function strFormatString(str)
  300.     If str = "" Then
  301.         strFormatString = " "
  302.     Else
  303.         strFormatString = str
  304.     End If
  305. End Function
  306.  
  307. Function strCleanString (str)
  308.  
  309.     Dim strClean, i, iLength, ch
  310.  
  311.     strClean = ""
  312.     iLength = Len (str)
  313.  
  314.     For i = 1 To iLength
  315.         ch = Mid (str, i, 1)
  316.  
  317.         Select Case ch
  318.         Case "<"
  319.             strClean = strClean & "<"
  320.         Case ">"
  321.             strClean = strClean & ">"
  322.         Case "&"
  323.             strClean = strClean & "&"
  324.         Case Else
  325.             strClean = strClean & ch
  326.         End Select
  327.     Next
  328.     strCleanString = strClean
  329.  
  330. End Function
  331.  
  332. Function strCleanRequest (str)
  333.  
  334.     strCleanRequest = strCleanString (Request(str))
  335.  
  336. End Function
  337.  
  338. Function JobEtaInfo (objPrinter)
  339.     Dim strTime, iJobCount, iMinute
  340.     Dim strHTML
  341.  
  342.     Const L_NoJobPending_Text = "    <b>Waiting Time:</b> 0 <br><b>Pending Documents:</b> 0 "
  343.     Const L_ErrorNoJobCompletion_Text = "<font color=red>Error in printing</font> "
  344.     Const L_LongHour_Text = "> 8 hr"
  345.     Const L_About_Text = "about "
  346.     Const L_Hour_Text = " hr"
  347.     Const L_Minute_Text = " min"
  348.  
  349.     Const L_QueueStatus_Text = "<b>Printer Queue:</b> "
  350.     Const L_WaitingTime_Text = "      <b>Waiting Time:</b> "
  351.     Const L_Unknown_Text = "Unknown"
  352.     Const L_JobPending_Text = "<b>Pending Documents:</b> "
  353.     Const L_AvgSize_Text = "      <b>Average size:</b> "
  354.     Const L_Pages_Text =  " page(s)"
  355.  
  356.  
  357.     strHTML = L_QueueStatus_Text & strPrinterStatus (objPrinter.Status) & L_WaitingTime_Text
  358.  
  359.     objPrinter.CalcJobETA
  360.  
  361.     If ( objPrinter.Status And &H9F ) Then
  362.         strHTML = strHTML & L_Unknown_Text
  363.     'End If
  364.     'If 1 Then
  365.     Else
  366.         If objPrinter.PendingJobCount = 0 Then
  367.             strHTML = strHTML & "0"
  368.         Else
  369.             iMinute = objPrinter.JobCompletionMinute
  370.             'iMinute = 240  'For testing purpose
  371.             If iMinute <> -1 Then
  372.                 If iMinute > 480 Then
  373.                     strTime = L_LongHour_Text
  374.                 Elseif iMinute > 60 Then
  375.                     strTime = L_About_Text & CStr (Int (iMinute / 60)) & L_Hour_Text
  376.                 Else
  377.                     strTime = L_About_Text & CStr (iMinute) & L_Minute_Text
  378.                 End If
  379.                 strHTML = strHTML & strTime
  380.             Else
  381.                 strHTML = strHTML & L_Unknown_Text
  382.             End If
  383.         End If
  384.     End If
  385.  
  386.     strHTML = strHTML & "<br>"
  387.     iJobCount = objPrinter.PendingJobCount
  388.     strHTML = strHTML & L_JobPending_Text & CStr (iJobCount)
  389.  
  390.     If iJobCount > 0 Then
  391.         strHTML = strHTML & L_AvgSize_Text
  392.         If ObjPrinter.AvgJobSizeUnit = 1 Then 'Page
  393.             strHTML = strHTML & CStr (ObjPrinter.AvgJobSize) + L_Pages_Text
  394.         Else
  395.             strHTML = strHTML & strFormatJobSize(ObjPrinter.AvgJobSize)
  396.         End If
  397.     End If
  398.  
  399.     JobEtaInfo = "<font " & DEF_FONT & "size= -1>" & strHTML & "</font>"
  400.  
  401. End Function
  402.  
  403. Function GetFriendlyName (strPrtName, strComputer)
  404.  
  405.     Dim lOffset, strServerName
  406.  
  407.     If Left (strPrtName, 2) = "\\" Then
  408.         lOffset = InStr (3, strPrtName, "\")
  409.         strServerName = Mid (strPrtName, 3, lOffset - 3)
  410.         If strServerName = strComputer Then 'Cut the server name only if it is same as the computer name
  411.             strPrtName = Mid (strPrtName, lOffset + 1)
  412.         End If
  413.     End If
  414.     GetFriendlyName = strPrtName
  415.  
  416. End Function
  417.  
  418. %>
  419.